// 泛型
// 指在定义函数、接口或类的时候，不预先指定具体的类型，
// 而在使用的时候再指定具体类型的一种特性
// function add(val:string|number,y?:string):string{
//   let arr:Array<any>=[];
//   arr.push(val);
//   return arr.join("");
// }
// console.log(add("汤唯"))
// console.log(add(11))
// 泛型的变量  用任意字母代替 用<>放置在函数名后面
// 常用字母 T,U,K,V
// 泛型约束函数
function add(val, y) {
    var arr = [];
    arr.push(val);
    return arr;
}
// 泛型的实参 在调用函数时候传递
add("德华", 2);
add(3, 4);
add(true, false);
console.log(add(true, false));
//多个泛型的形参 
function say(x, y, z) {
    // unknown 未知类型
    var f;
    if (typeof x == "number" && typeof y == "number") {
        var fa = x + y;
    }
    var arr = [];
    arr.push(x);
    console.log(x);
    console.log(y);
    console.log(z);
    return x;
}
say(88, 2, true);
say("1", "1", true);
// 给接口 传递泛型的参数
var obj1 = {
    name: "bmw",
    age: 88,
    run: function (km) {
        return 88;
    }
};
// 类的泛型
// 泛型继承了接口 类型
var CarList = /** @class */ (function () {
    function CarList(name, color) {
        this.name = name;
        this.color = color;
    }
    CarList.prototype.say = function (h) {
    };
    return CarList;
}());
// 泛型是实参 可以是接口类型
var benchi = new CarList({ name: "1", color: "1", say: function () { } }, 18);
console.log(benchi);
var bmw = new CarList({ name: "2", color: "2", say: function () { } }, "白色");
console.log(bmw);
var yadi = new CarList({ name: "2", color: "2", say: function () { } }, { scolor: "#ccc" });
//在ts使用 获取html元素  常用类型断言
var box = document.getElementById("box");
box.style.background = "green";
var btn = document.getElementById("btn");
btn.onclick = function () {
    alert("新年快乐");
};
